package com.xavier.dong.netty.heartbeat;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.timeout.IdleStateEvent;

/**
 * @author XavierDong
 **/
public class MyServerHandler extends ChannelInboundHandlerAdapter {


    /**
     * 心跳检测包，调用的
     *
     * @param ctx 上下文
     * @param evt 事件
     * @throws Exception
     */
    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {

        if (evt instanceof IdleStateEvent) {

            // 将 Event 向下转型 IdleStateEvent
            IdleStateEvent event = (IdleStateEvent) evt;

            String eventType = null;

            switch (event.state()) {

                case READER_IDLE:
                    eventType = "读空闲";
                    break;

                case WRITER_IDLE:
                    eventType = "写空闲";
                    break;

                case ALL_IDLE:
                    eventType = "读写空闲";
                    break;
            }


            System.out.println(ctx.channel().remoteAddress() + "--超时事件发生--" + eventType);
            System.out.println("服务器 做 相应的处理..");

            // 如果 发生 空闲了 直接关闭通道，只会检测到一次
            ctx.channel().close();
        }


    }
}
